
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.brain.sgc.view.mbean;

import com.brain.capa.dto.AlumnoDto;
import com.brain.capa.manager.AlumnoManager;
import com.brain.core.common.UtilCore;
import com.brain.core.dto.ArchivoDto;
import com.brain.core.view.mbean.*;
import com.brain.core.dto.ParametroDto;
import com.brain.core.exception.DAOException;
import com.brain.core.manager.RecursosManager;
import com.brain.core.view.util.ApplicationHelper;
import com.brain.core.view.util.ConstantesCore;
import com.brain.desa.dto.EvaluacionCompetenciaDto;
import com.brain.desa.dto.EvaluacionDesempenoDto;
import com.brain.desa.manager.EvaluacionCompetenciaManager;
import com.brain.desa.manager.EvaluacionDesempenoManager;
import com.brain.gest.dto.GestionTalentoPersonaDto;
import com.brain.gest.manager.GestionTalentoPersonaManager;
import com.brain.sele.dto.CalificacionDto;
import com.brain.sele.dto.RequerimientoDto;
import com.brain.sele.manager.CalificacionManager;
import com.brain.sgc.dto.AmonestacionDto;
import com.brain.sgc.dto.CapacitacionDto;
import com.brain.sgc.dto.ConocimientoAdicionalDto;
import com.brain.sgc.dto.ConocimientoInformaticaDto;
import com.brain.sgc.dto.DocumentoDto;
import com.brain.sgc.dto.EstudioDto;
import com.brain.sgc.dto.ExperienciaDto;
import com.brain.sgc.dto.IdiomaDto;
import com.brain.sgc.dto.PersonaDto;
import com.brain.sgc.dto.ReferenciaDto;
import com.brain.sgc.manager.AmonestacionManager;
import com.brain.sgc.manager.CapacitacionManager;
import com.brain.sgc.manager.ConocimientoAdicionalManager;
import com.brain.sgc.manager.ConocimientoInformaticaManager;
import com.brain.sgc.manager.DocumentoManager;
import com.brain.sgc.manager.EstudioManager;
import com.brain.sgc.manager.ExperienciaManager;
import com.brain.sgc.manager.IdiomaManager;
import com.brain.sgc.manager.PersonaManager;
import com.brain.sgc.manager.ReferenciaManager;
import com.brain.sgc.view.util.ConstantesSgc;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;
import javax.faces.event.ActionEvent;
import org.apache.log4j.Logger;
import org.primefaces.context.RequestContext;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.UploadedFile;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

/**
 *
 * @author Hvives
 */
@Controller("legajoMBean")
@Scope("session")
public class LegajoMBean extends GenericMBean implements Serializable {

    private static Logger logger = Logger.getLogger(LegajoMBean.class);
    @Resource
    private DocumentoManager managerDocumento;
    @Resource
    private CapacitacionManager managerCapacitacion;
    @Resource
    private RecursosManager recursosManager;
    @Resource
    private PersonaManager personaManager;
    @Resource
    private AmonestacionManager amonestacionManager;
    @Resource
    private AlumnoManager alumnoManager;
    @Resource
    private GestionTalentoPersonaManager gestionTalentoPersonaManager;
    @Resource
    private EvaluacionCompetenciaManager evaluacionCompetenciaManager;
    @Resource
    private EvaluacionDesempenoManager evaluacionDesempenoManager;
    private AlumnoDto alumnoDto;
    private GestionTalentoPersonaDto gestionTalentoPersonaDto;
    private List<AlumnoDto> listaAlumno;
    private List<GestionTalentoPersonaDto> listaGestionTalentoPersonaDto;
    private List<EvaluacionCompetenciaDto> listaEvaluacionCompetencia;
    private List<EvaluacionDesempenoDto> listaEvaluacionDesempeno;
    private List<DocumentoDto> lista;
    private List<CapacitacionDto> listaCapacitacion;
    private DocumentoDto dtoDocumento;
    private DocumentoDto dtoFiltro;
    private PersonaDto personaDto;
    private CapacitacionDto dtoCapacitacion;
    private CapacitacionDto dtoFiltroCapacitacion;
    private String keyTitulo = "documento.panel";
    @Autowired
    private ApplicationMBean applicationMBean;
    @Autowired
    private SessionMBean sessionMBean;
    private List<ParametroDto> listaTipos;
    private List<ParametroDto> listaEstados;
    private String urlInvocador;
    /////
    //Nuevo Estudio
    private int accionEstudio;
    private EstudioDto estudioDto;
    private List<ParametroDto> listaNivel;
    private List<ParametroDto> listaEstadoEstudio;
    private List<ParametroDto> listaProfesion;
    //Parametros Idioma
    private IdiomaDto idiomaDto;
    private ParametroDto idiomaParametroDto;
    private String oral;
    private String escrito;
    private List<ParametroDto> listaIdioma;
    //Parametros Herramientas Office
    private ConocimientoInformaticaDto informaticaDto;
    private ParametroDto informaticaParametroDto;
    private String nivelInformatica;
    private List<ParametroDto> listaHerramientaOffice;
    //Parametros Conocimiento Adicional
    private ConocimientoAdicionalDto conocimientoAdicionalDto;
    private String tituloConocAdicional;
    private String descripcionConocAdicional;
    //Parametros Experiencia Profesional
    private int accionExperiencia;
    private ExperienciaDto experienciaDto;
    private List<ParametroDto> listaArea;
    private List<ParametroDto> listaIndustria;
    //Referencia
    private ReferenciaDto referenciaDto;
    private String descripcionReferencia;
    //amonestacion
    private AmonestacionDto amonestacionDto;
    private String descripcionAmonestacion;
    private String tituloAmonestacion;
    @Resource
    private ReferenciaManager referenciaManager;
    private List<ParametroDto> listaSexosFiltro;
    private List<ParametroDto> listaEstadoCivilFiltro;
    private List<ParametroDto> listaTipoDocumentoFiltro;
    private List<ParametroDto> listaSexos;
    private List<ParametroDto> listaEstadoCivil;
    private List<ParametroDto> listaTipoDocumento;
    private List<ParametroDto> listaTipoMoneda;
    private Boolean accesoBtnGuardar = Boolean.TRUE;
    private List<CalificacionDto> listaEvaluaciones;
    private List<RequerimientoDto> listaRequerimientoDto;
    private RequerimientoDto requerimientoDto;
    private List<ParametroDto> listaTipoDoc;
    private List<ParametroDto> listaSexo;
    private List<ParametroDto> listaSedesFiltro;
    @Resource
    private EstudioManager estudioManager;
    @Resource
    private IdiomaManager idiomaManager;
    @Resource
    private ExperienciaManager experienciaManager;
    @Resource
    private ConocimientoAdicionalManager conocimientoAdicionalManager;
    @Resource
    private ConocimientoInformaticaManager informaticaManager;
    @Resource
    private CalificacionManager calificacionjManager;
    //Files
    @Resource
    private ArchivoMBean archivoMBean;
    private List<ParametroDto> listaTiposArchivo;

    public LegajoMBean() {
        this.dtoFiltro = new DocumentoDto();
        this.dtoFiltroCapacitacion = new CapacitacionDto();
    }

    public String iniciar() {
        this.inicializarDatosLegajo();
        return ConstantesSgc.UrlNavegacion.URL_LEGAJO;
    }

    public void inicializarDatosLegajo() {
        this.cargarDatosPersonaLegajo();
        this.dtoDocumento = new DocumentoDto();
        this.dtoDocumento.setCaduce(Boolean.FALSE);
        this.dtoCapacitacion = new CapacitacionDto();
        this.dtoFiltro = new DocumentoDto();
        this.dtoFiltro.setEstadoDto(new ParametroDto());
        this.dtoFiltroCapacitacion = new CapacitacionDto();
    }

    public void cargarDatosPersonaLegajo() {
        this.obtenerDocumentosPorPersona(this.personaDto.getId());
        this.obtenerCapacitacionesPorPersona(this.personaDto.getId());
        this.obtenerCapaPorPersona(this.personaDto.getId());
        this.obtenerGestionTalentoPorPersona(this.personaDto.getId());
        this.obtenerEvaCompetenciaDesempenio(this.personaDto.getId());
        archivoMBean.cargarArchivos(ConstantesCore.Entidad.PERSONA, this.personaDto.getId());
    }

    public void nuevaCapacitacion() {
        sessionMBean.setAccion(ConstantesSgc.Formulario.NUEVO);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        this.dtoCapacitacion = new CapacitacionDto();
        this.dtoCapacitacion.setEstado(Boolean.TRUE);
    }

    public void nuevo() {
        sessionMBean.setAccion(ConstantesSgc.Formulario.NUEVO);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        this.dtoDocumento = new DocumentoDto();
        this.dtoDocumento.setCaduce(Boolean.FALSE);
        this.dtoDocumento.setTipoDto(new ParametroDto(40298L));
        this.lista = new ArrayList<DocumentoDto>();
    }

    public void editar() {
        sessionMBean.setAccion(ConstantesSgc.Formulario.EDITAR);
    }

    public void eliminarDocumento() {
        try {
            this.managerDocumento.eliminar(this.dtoDocumento);
            this.obtenerDocumentosPorPersona(this.personaDto.getId());
            showMessage(UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok"));
        } catch (DAOException ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    public void editarCapacitacion() {
        sessionMBean.setAccion(ConstantesSgc.Formulario.EDITAR);
    }

    public void ver() {
        sessionMBean.setAccion(ConstantesSgc.Formulario.VER);
    }

    public void verCapacitacion() {
        sessionMBean.setAccion(ConstantesSgc.Formulario.VER);
    }

    public void buscar(ActionEvent ae) {
        this.dtoDocumento = new DocumentoDto();
        this.dtoDocumento.setCaduce(Boolean.FALSE);
        try {
            this.lista = this.managerDocumento.obtenerDocumentos(this.dtoFiltro, this.personaDto.getId());
        } catch (DAOException ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    public void buscar() {
        this.dtoDocumento = new DocumentoDto();
        this.dtoDocumento.setCaduce(Boolean.FALSE);
        try {
            this.lista = this.managerDocumento.obtenerDocumentos(this.dtoFiltro, this.personaDto.getId());
        } catch (DAOException ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    public void buscarCapacitacion(ActionEvent ae) {
        this.dtoDocumento.setCaduce(Boolean.FALSE);
        try {
            this.listaCapacitacion = this.managerCapacitacion.obtenerCapacitaciones(this.dtoFiltroCapacitacion, this.personaDto.getId());

        } catch (DAOException ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    public void buscarCapacitacion() {
        this.dtoDocumento.setCaduce(Boolean.FALSE);
        try {
            this.listaCapacitacion = this.managerCapacitacion.obtenerCapacitaciones(this.dtoFiltroCapacitacion, this.personaDto.getId());

        } catch (DAOException ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    public void guardarDocumento() {
        RequestContext context = RequestContext.getCurrentInstance();
        this.dtoDocumento.setPersonaDto(this.personaDto);
        boolean resultado = this.managerDocumento.guardar(this.dtoDocumento);
        this.obtenerDocumentosPorPersona(this.personaDto.getId());
        context.addCallbackParam("CallbackParam", resultado);
    }

    public void guardarCapacitacion() {
        RequestContext context = RequestContext.getCurrentInstance();
        this.dtoCapacitacion.setPersonaDto(this.personaDto);
        boolean resultadoCap = this.managerCapacitacion.guardar(this.dtoCapacitacion);
        this.obtenerCapacitacionesPorPersona(this.personaDto.getId());
        context.addCallbackParam("CallbackParam", resultadoCap);
    }

    public void resetCaducidad() {
        this.dtoDocumento.setFechaCaducidad(null);
        this.dtoDocumento.setMesesCaducidad(null);
    }

    protected void obtenerDocumentosPorPersona(Long idPerson) {
        try {
            this.lista = this.managerDocumento.obtenerDocumentosPorPersona(idPerson);
        } catch (DAOException ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    protected void obtenerCapacitacionesPorPersona(Long idPerson) {
        try {
            this.listaCapacitacion = this.managerCapacitacion.obtenerCapacitacionesPorPersona(idPerson);
        } catch (DAOException ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    protected void obtenerCapaPorPersona(Long idPerson) {
        try {
            this.listaAlumno = this.alumnoManager.obtenerListaPorPersonaId(idPerson);
        } catch (DAOException ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    protected void obtenerGestionTalentoPorPersona(Long idPerson) {
        try {
            this.listaGestionTalentoPersonaDto = this.gestionTalentoPersonaManager.obtenerListaPorPersonaId(idPerson);
        } catch (DAOException ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    protected void obtenerEvaCompetenciaDesempenio(Long idPerson) {
        try {
            this.listaEvaluacionCompetencia = this.evaluacionCompetenciaManager.obtenerListaPorPersonaId(idPerson);
            this.listaEvaluacionDesempeno = this.evaluacionDesempenoManager.obtenerListaPorPersonaId(idPerson);
        } catch (DAOException ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    public String retroceder() {
        if (!this.urlInvocador.equals("")) {
            return this.urlInvocador;
        }
        return "";
    }

    //////
    public String nuevoEstudio() {
        this.accionEstudio = ConstantesCore.Formulario.NUEVO;
        this.estudioDto = estudioManager.inicializar();
        return "";
    }

    public String verEstudio() {
        this.accionEstudio = ConstantesCore.Formulario.VER;
        //ApplicationHelper.cargarPropietarios(ConstantesCore.Entidad.ESTUDIO, this.estudioDto.getId());
        return "";
    }

    public String editarEstudio() {
        this.accionEstudio = ConstantesCore.Formulario.EDITAR;
        //this.getListaParametrosPadre();
        ApplicationHelper.cargarPropietarios(ConstantesCore.Entidad.ESTUDIO, this.estudioDto.getId());
        return "";
    }

    public void eliminarEstudio() {
        try {
            this.estudioManager.eliminar(this.estudioDto);
            this.recuperarDtoPadre();
            showMessage(UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok"));
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    public String agregarEstudio() {
        if (isValidDatosEstudio(this.estudioDto) == false) {
            logger.info("Se aborta el proceso de grabado.");
            return "";
        }
        return this.estudioManager.guardar(this.estudioDto, this.accionEstudio, this.personaDto);
    }

    protected void recuperarDtoPadre() {
        try {
            this.personaDto = this.personaManager.obtenerPersonaPorId(this.personaDto.getId());
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    private boolean isValidDatosEstudio(EstudioDto dto) {
        boolean validaEstudio = Boolean.TRUE;

        if (dto.getFechaFin() != null && dto.getFechaInicio() != null) {
            if (dto.getFechaFin().compareTo(dto.getFechaInicio()) <= 0) {
                recursosManager.showWarning("La Fecha de Fin no puede ser menor a la Fecha de Inicio.");
                validaEstudio = false;
            }
        }

        if (dto.getMateriaAprobada() != null && dto.getMateriaCantidad() != null) {
            if (dto.getMateriaAprobada() > dto.getMateriaCantidad()) {
                recursosManager.showWarning("La cantidad de Materias Aprobadas no puede ser mayor a la cantidad de materias.");
                validaEstudio = false;
            }
        }

        return validaEstudio;
    }

    public void agregarIdioma() {
        try {
            IdiomaDto idiomaDto = new IdiomaDto();
            idiomaDto.setIdiomaDto(this.idiomaParametroDto);
            idiomaDto.setPersonaDto(this.personaDto);
            idiomaDto.setOral(this.oral);
            idiomaDto.setEscrito(this.escrito);
            if (isValidDatosIdioma(idiomaDto) == false) {
                logger.info("Se aborta el proceso de grabado.");
                return;
            }
            this.idiomaManager.nuevo(idiomaDto);
            recuperarDtoPadre();
            showMessage(UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok"));
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
        }
        this.idiomaParametroDto = null;
        this.oral = null;
        this.escrito = null;
    }

    public void eliminarIdioma() {
        try {
            this.idiomaManager.eliminar(this.idiomaDto);
            this.recuperarDtoPadre();
            showMessage(UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok"));
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    public void agregarHerramientaInformatica() {
        try {
            ConocimientoInformaticaDto conocInformaticaDto = new ConocimientoInformaticaDto();
            conocInformaticaDto.setPersonaDto(this.personaDto);
            conocInformaticaDto.setHerramientaOfficeDto(this.informaticaParametroDto);
            conocInformaticaDto.setNivel(this.nivelInformatica);
            if (isValidDatosInformatica(conocInformaticaDto) == false) {
                logger.info("Se aborta el proceso de grabado.");
                return;
            }
            this.informaticaManager.nuevo(conocInformaticaDto);
            recuperarDtoPadre();
            showMessage(UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok"));
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
        }
        this.informaticaParametroDto = null;
        this.nivelInformatica = null;
    }

    private boolean isValidDatosInformatica(ConocimientoInformaticaDto dto) {
        boolean validaInformatica = Boolean.TRUE;
        try {
            if (this.informaticaManager.obtenerInformaticaPorDto(dto) != null
                    && this.informaticaManager.obtenerInformaticaPorDto(dto).size() > 0) {
                recursosManager.showWarning("La Herramienta Informática ya existe en la BD.");
                validaInformatica = false;
            }
        } catch (DAOException e) {
            logger.error(e);
        }
        return validaInformatica;
    }

    private boolean isValidDatosIdioma(IdiomaDto dto) {
        boolean validaIdioma = Boolean.TRUE;
        try {
            if (this.idiomaManager.obtenerCantidad(dto) > 0) {
                recursosManager.showWarning("El Idioma ingresado ya existe en la BD.");
                validaIdioma = false;
            }
        } catch (DAOException e) {
            logger.error(e);
        }
        return validaIdioma;
    }

    public void eliminarHerramientaInformatica() {
        try {
            this.informaticaManager.eliminar(this.informaticaDto);
            this.recuperarDtoPadre();
            showMessage(UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok"));
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    public void agregarConocimientoAdicional() {
        try {
            ConocimientoAdicionalDto conocAdicionalDto = new ConocimientoAdicionalDto();
            conocAdicionalDto.setPersonaDto(this.personaDto);
            conocAdicionalDto.setTitulo(this.tituloConocAdicional);
            conocAdicionalDto.setDescripcion(this.descripcionConocAdicional);
            if (isValidDatosConocimientoAdic(conocAdicionalDto) == false) {
                logger.info("Se aborta el proceso de grabado.");
                return;
            }
            this.conocimientoAdicionalManager.nuevo(conocAdicionalDto);
            recuperarDtoPadre();
            showMessage(UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok"));
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
        }
        this.tituloConocAdicional = null;
        this.descripcionConocAdicional = null;
    }

    public void agregarAmonestacion() {
        try {
            AmonestacionDto amonestacionDto = new AmonestacionDto();
            amonestacionDto.setPersonaDto(this.personaDto);
            amonestacionDto.setTitulo(this.tituloAmonestacion);
            amonestacionDto.setDescripcion(this.descripcionAmonestacion);
            this.amonestacionManager.nuevo(amonestacionDto);
            recuperarDtoPadre();
            showMessage(UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok"));
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
        }
        this.tituloAmonestacion = null;
        this.descripcionAmonestacion = null;
    }

    public void eliminarConocimientoAdicional() {
        try {
            this.conocimientoAdicionalManager.eliminar(this.conocimientoAdicionalDto);
            this.recuperarDtoPadre();
            showMessage(UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok"));
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    public void eliminarAmonestacion() {
        try {
            this.amonestacionManager.eliminar(this.amonestacionDto);
            this.recuperarDtoPadre();
            showMessage(UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok"));
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    public String nuevaExperiencia() {
        this.accionExperiencia = ConstantesCore.Formulario.NUEVO;
        this.experienciaDto = experienciaManager.inicializar();
        return "";
    }

    public String editarExperiencia() {
        this.accionExperiencia = ConstantesCore.Formulario.EDITAR;
        //this.getListaParametrosPadre();
        ApplicationHelper.cargarPropietarios(ConstantesCore.Entidad.EXPERIENCIA, this.experienciaDto.getId());
        return "";
    }

    public String verExperiencia() {
        this.accionExperiencia = ConstantesCore.Formulario.VER;
        //ApplicationHelper.cargarPropietarios(ConstantesCore.Entidad.EXPERIENCIA, this.experienciaDto.getId());
        return "";
    }

    public void eliminarExperiencia() {
        try {
            this.experienciaManager.eliminar(this.experienciaDto);
            this.recuperarDtoPadre();
            showMessage(UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok"));
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    public String agregarExperiencia() {
        if (isValidDatosExperiencia(this.experienciaDto) == false) {
            logger.info("Se aborta el proceso de grabado.");
            return "";
        }
        return this.experienciaManager.guardar(this.experienciaDto, this.accionExperiencia, this.personaDto);
    }

    private boolean isValidDatosExperiencia(ExperienciaDto dto) {
        boolean validaExperiencia = Boolean.TRUE;

        if (dto.getFechaFin() != null && dto.getFechaInicio() != null) {
            if (dto.getFechaFin().compareTo(dto.getFechaInicio()) <= 0) {
                recursosManager.showWarning("La Fecha de Fin no puede ser menor a la Fecha de Inicio.");
                validaExperiencia = false;
            }
        }
        return validaExperiencia;
    }

    private boolean isValidDatosReferencia(ReferenciaDto dto) {
        boolean validaReferencia = Boolean.TRUE;
        if (dto.getDescripcion() == null || dto.getDescripcion().equals("")) {
            recursosManager.showWarning("La Descripción no puede estar vacía.");
            validaReferencia = false;
        }
        return validaReferencia;
    }

    private boolean isValidDatosConocimientoAdic(ConocimientoAdicionalDto dto) {
        boolean validaConocAdicional = Boolean.TRUE;
        try {
            if (this.conocimientoAdicionalManager.obtenerConocimientoAdicPorTitulo(dto) != null
                    && this.conocimientoAdicionalManager.obtenerConocimientoAdicPorTitulo(dto).size() > 0) {
                recursosManager.showWarning("El titulo ingresado ya existe en la BD.");
                validaConocAdicional = false;
            }
        } catch (DAOException e) {
            logger.error(e);
        }
        return validaConocAdicional;
    }

    public void agregarReferencia() {
        try {
            ReferenciaDto referenciaDto = new ReferenciaDto();
            referenciaDto.setPersonaDto(this.personaDto);
            referenciaDto.setDescripcion(this.descripcionReferencia);
            if (isValidDatosReferencia(referenciaDto) == false) {
                logger.info("Se aborta el proceso de grabado.");
                return;
            }
            this.referenciaManager.nuevo(referenciaDto);
            recuperarDtoPadre();
            showMessage(UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok"));
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
        }
        this.descripcionReferencia = null;
    }

    public void eliminarReferencia() {
        try {
            this.referenciaManager.eliminar(this.referenciaDto);
            this.recuperarDtoPadre();
            recursosManager.showMessage(UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok"));
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    public void listenerFile(FileUploadEvent event) {
        System.out.println("ENTREO");
        UploadedFile file = event.getFile();
        System.out.println("NOMBRE FILEEE   " + file.getFileName());
        ArchivoDto archivoDto = new ArchivoDto();
        archivoDto.setNombre(file.getFileName());
        archivoDto.setTipoDto(new ParametroDto(ConstantesCore.Parametro.ARCHIVO_TIPO_OTROS));
        archivoDto.setPeso(BigDecimal.valueOf(file.getSize()));
        archivoDto.setComentario("NUEVO ARCHIVO");
        archivoDto.setUsuario(this.sessionMBean.getSessionUsuarioDto().getId());
        archivoDto.setTerminal(this.sessionMBean.getSessionTerminal());
        archivoDto.setFecha(UtilCore.Fecha.obtenerFechaActualDate());
        archivoDto.setBites(file.getContents());
        archivoDto.setDetalle(archivoDto.getNombre());

        if (archivoDto.getNombre().indexOf(".") != -1) {
            archivoDto.setExtension(archivoDto.getNombre().substring(archivoDto.getNombre().lastIndexOf(".") + 1, archivoDto.getNombre().length()));
        }
        try {
            archivoMBean.grabarArchivo(archivoDto, ConstantesCore.Entidad.PERSONA, this.personaDto.getId());
        } catch (FileNotFoundException ex) {
            showError("ARCHIVO NO ENCONTRADO :: " + ex.getMessage());
            logger.error(ex);
        } catch (IOException ex) {
            showError("ERROR DE ENTRADA Y SALIDA :: " + ex.getMessage());
            logger.error(ex);
        }
        archivoMBean.cargarArchivos(ConstantesCore.Entidad.PERSONA, this.personaDto.getId());
    }

    ////
    public static Logger getLogger() {
        return logger;
    }

    public static void setLogger(Logger logger) {
        LegajoMBean.logger = logger;
    }

    public RecursosManager getRecursosManager() {
        return recursosManager;
    }

    public void setRecursosManager(RecursosManager recursosManager) {
        this.recursosManager = recursosManager;
    }

    public List<DocumentoDto> getLista() {
        return lista;
    }

    public void setLista(List<DocumentoDto> lista) {
        this.lista = lista;
    }

    public DocumentoDto getDtoDocumento() {
        return dtoDocumento;
    }

    public void setDtoDocumento(DocumentoDto dtoDocumento) {
        this.dtoDocumento = dtoDocumento;
    }

    public DocumentoDto getDtoFiltro() {
        return dtoFiltro;
    }

    public void setDtoFiltro(DocumentoDto dtoFiltro) {
        this.dtoFiltro = dtoFiltro;
    }

    public String getKeyTitulo() {
        return keyTitulo;
    }

    public void setKeyTitulo(String keyTitulo) {
        this.keyTitulo = keyTitulo;
    }

    public ApplicationMBean getApplicationMBean() {
        return applicationMBean;
    }

    public void setApplicationMBean(ApplicationMBean applicationMBean) {
        this.applicationMBean = applicationMBean;
    }

    public SessionMBean getSessionMBean() {
        return sessionMBean;
    }

    public void setSessionMBean(SessionMBean sessionMBean) {
        this.sessionMBean = sessionMBean;
    }

    public List<ParametroDto> getListaTipos() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesSgc.CatalogoParametro.TIPO_DOCUMENTO_PERSONA);
    }

    public void setListaTipos(List<ParametroDto> listaTipos) {
        this.listaTipos = listaTipos;
    }

    public List<ParametroDto> getListaEstados() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoAdd(ConstantesSgc.CatalogoParametro.DOCUMENTO_ESTADOS, ConstantesCore.Parametro.TODOS);
    }

    public void setListaEstados(List<ParametroDto> listaEstados) {
        this.listaEstados = listaEstados;
    }

    public PersonaDto getPersonaDto() {
        return personaDto;
    }

    public void setPersonaDto(PersonaDto personaDto) {
        this.personaDto = personaDto;
    }

    public String getUrlInvocador() {
        return urlInvocador;
    }

    public void setUrlInvocador(String urlInvocador) {
        this.urlInvocador = urlInvocador;
    }

    public List<CapacitacionDto> getListaCapacitacion() {
        return listaCapacitacion;
    }

    public void setListaCapacitacion(List<CapacitacionDto> listaCapacitacion) {
        this.listaCapacitacion = listaCapacitacion;
    }

    public CapacitacionManager getManagerCapacitacion() {
        return managerCapacitacion;
    }

    public void setManagerCapacitacion(CapacitacionManager managerCapacitacion) {
        this.managerCapacitacion = managerCapacitacion;
    }

    public CapacitacionDto getDtoCapacitacion() {
        return dtoCapacitacion;
    }

    public void setDtoCapacitacion(CapacitacionDto dtoCapacitacion) {
        this.dtoCapacitacion = dtoCapacitacion;
    }

    public CapacitacionDto getDtoFiltroCapacitacion() {
        return dtoFiltroCapacitacion;
    }

    public void setDtoFiltroCapacitacion(CapacitacionDto dtoFiltroCapacitacion) {
        this.dtoFiltroCapacitacion = dtoFiltroCapacitacion;
    }

    public List<ParametroDto> getListaSexosFiltro() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoAdd(ConstantesCore.CatalogoParametro.GENERO_PERSONA, ConstantesCore.Parametro.TODOS);
    }

    public void setListaSexosFiltro(List<ParametroDto> listaSexosFiltro) {
        this.listaSexosFiltro = listaSexosFiltro;
    }

    public List<ParametroDto> getListaEstadoCivilFiltro() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoAdd(ConstantesCore.CatalogoParametro.ESTADO_CIVIL, ConstantesCore.Parametro.TODOS);
    }

    public void setListaEstadoCivilFiltro(List<ParametroDto> listaEstadoCivilFiltro) {
        this.listaEstadoCivilFiltro = listaEstadoCivilFiltro;
    }

    public List<ParametroDto> getListaTipoDocumentoFiltro() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoAdd(ConstantesCore.CatalogoParametro.DOCUMENTOS_DE_IDENTIFICACION, ConstantesCore.Parametro.TODOS);
    }

    public List<ParametroDto> getListaEstadoCivil() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCore.CatalogoParametro.ESTADO_CIVIL);
    }

    public void setListaEstadoCivil(List<ParametroDto> listaEstadoCivil) {
        this.listaEstadoCivil = listaEstadoCivil;
    }

    public List<ParametroDto> getListaTipoDocumento() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCore.CatalogoParametro.DOCUMENTOS_DE_IDENTIFICACION);
    }

    public void setListaTipoDocumento(List<ParametroDto> listaTipoDocumento) {
        this.listaTipoDocumento = listaTipoDocumento;
    }

    public List<ParametroDto> getListaTipoMoneda() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCore.CatalogoParametro.MONEDAS_DEL_SISTEMA);
    }

    public void setListaTipoMoneda(List<ParametroDto> listaTipoMoneda) {
        this.listaTipoMoneda = listaTipoMoneda;
    }

    public Boolean getAccesoBtnGuardar() {
        return accesoBtnGuardar;
    }

    public void setAccesoBtnGuardar(Boolean accesoBtnGuardar) {
        this.accesoBtnGuardar = accesoBtnGuardar;
    }

    public IdiomaDto getIdiomaDto() {
        return idiomaDto;
    }

    public void setIdiomaDto(IdiomaDto idiomaDto) {
        this.idiomaDto = idiomaDto;
    }

    public ParametroDto getIdiomaParametroDto() {
        return idiomaParametroDto;
    }

    public void setIdiomaParametroDto(ParametroDto idiomaParametroDto) {
        this.idiomaParametroDto = idiomaParametroDto;
    }

    public String getOral() {
        return oral;
    }

    public void setOral(String oral) {
        this.oral = oral;
    }

    public String getEscrito() {
        return escrito;
    }

    public void setEscrito(String escrito) {
        this.escrito = escrito;
    }

    public IdiomaManager getIdiomaManager() {
        return idiomaManager;
    }

    public void setIdiomaManager(IdiomaManager idiomaManager) {
        this.idiomaManager = idiomaManager;
    }

    public List<ParametroDto> getListaIdioma() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCore.CatalogoParametro.IDIOMAS_DEL_SISTEMA);
    }

    public void setListaIdioma(List<ParametroDto> listaIdioma) {
        this.listaIdioma = listaIdioma;
    }

    public ConocimientoInformaticaDto getInformaticaDto() {
        return informaticaDto;
    }

    public void setInformaticaDto(ConocimientoInformaticaDto informaticaDto) {
        this.informaticaDto = informaticaDto;
    }

    public ParametroDto getInformaticaParametroDto() {
        return informaticaParametroDto;
    }

    public void setInformaticaParametroDto(ParametroDto informaticaParametroDto) {
        this.informaticaParametroDto = informaticaParametroDto;
    }

    public String getNivelInformatica() {
        return nivelInformatica;
    }

    public void setNivelInformatica(String nivelInformatica) {
        this.nivelInformatica = nivelInformatica;
    }

    public ConocimientoInformaticaManager getInformaticaManager() {
        return informaticaManager;
    }

    public void setInformaticaManager(ConocimientoInformaticaManager informaticaManager) {
        this.informaticaManager = informaticaManager;
    }

    public List<ParametroDto> getListaHerramientaOffice() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCore.CatalogoParametro.HERRAMIENTA_INFORMATICA);
    }

    public void setListaHerramientaOffice(List<ParametroDto> listaHerramientaOffice) {
        this.listaHerramientaOffice = listaHerramientaOffice;
    }

    public ConocimientoAdicionalDto getConocimientoAdicionalDto() {
        return conocimientoAdicionalDto;
    }

    public void setConocimientoAdicionalDto(ConocimientoAdicionalDto conocimientoAdicionalDto) {
        this.conocimientoAdicionalDto = conocimientoAdicionalDto;
    }

    public String getTituloConocAdicional() {
        return tituloConocAdicional;
    }

    public void setTituloConocAdicional(String tituloConocAdicional) {
        this.tituloConocAdicional = tituloConocAdicional;
    }

    public String getDescripcionConocAdicional() {
        return descripcionConocAdicional;
    }

    public void setDescripcionConocAdicional(String descripcionConocAdicional) {
        this.descripcionConocAdicional = descripcionConocAdicional;
    }

    public int getAccionExperiencia() {
        return accionExperiencia;
    }

    public void setAccionExperiencia(int accionExperiencia) {
        this.accionExperiencia = accionExperiencia;
    }

    public ExperienciaDto getExperienciaDto() {
        return experienciaDto;
    }

    public void setExperienciaDto(ExperienciaDto experienciaDto) {
        this.experienciaDto = experienciaDto;
    }

    public List<ParametroDto> getListaArea() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCore.CatalogoParametro.AREA_EXPERIENCIA);
    }

    public void setListaArea(List<ParametroDto> listaArea) {
        this.listaArea = listaArea;
    }

    public List<ParametroDto> getListaIndustria() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCore.CatalogoParametro.INDUSTRIA);
    }

    public void setListaIndustria(List<ParametroDto> listaIndustria) {
        this.listaIndustria = listaIndustria;
    }

    public ReferenciaDto getReferenciaDto() {
        return referenciaDto;
    }

    public void setReferenciaDto(ReferenciaDto referenciaDto) {
        this.referenciaDto = referenciaDto;
    }

    public String getDescripcionReferencia() {
        return descripcionReferencia;
    }

    public void setDescripcionReferencia(String descripcionReferencia) {
        this.descripcionReferencia = descripcionReferencia;
    }

    public ReferenciaManager getReferenciaManager() {
        return referenciaManager;
    }

    public void setReferenciaManager(ReferenciaManager referenciaManager) {
        this.referenciaManager = referenciaManager;
    }

    public int getAccionEstudio() {
        return accionEstudio;
    }

    public void setAccionEstudio(int accionEstudio) {
        this.accionEstudio = accionEstudio;
    }

    public EstudioDto getEstudioDto() {
        return estudioDto;
    }

    public void setEstudioDto(EstudioDto estudioDto) {
        this.estudioDto = estudioDto;
    }

    public List<ParametroDto> getListaNivel() {
        return this.recursosManager.addParametroaListaParametroPorCatalogo(this.recursosManager.obtenerParametrosActivosPorCatalogoExceptoAlgunos(ConstantesCore.CatalogoParametro.NIVEL_ESTUDIO, ConstantesCore.Parametro.NIVEL_ESTUDIO_OTROS), ConstantesCore.Parametro.NIVEL_ESTUDIO_OTROS);
    }

    public void setListaNivel(List<ParametroDto> listaNivel) {
        this.listaNivel = listaNivel;
    }

    public List<ParametroDto> getListaEstadoEstudio() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCore.CatalogoParametro.ESTADO_ESTUDIO);
    }

    public void setListaEstadoEstudio(List<ParametroDto> listaEstadoEstudio) {
        this.listaEstadoEstudio = listaEstadoEstudio;
    }

    public List<ParametroDto> getListaProfesion() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCore.CatalogoParametro.AREA_ESTUDIO);
    }

    public void setListaProfesion(List<ParametroDto> listaProfesion) {
        this.listaProfesion = listaProfesion;
    }

    public List<CalificacionDto> getListaEvaluaciones() {
        return listaEvaluaciones;
    }

    public void setListaEvaluaciones(List<CalificacionDto> listaEvaluaciones) {
        this.listaEvaluaciones = listaEvaluaciones;
    }

    public List<ParametroDto> getListaTipoDoc() {
        return listaTipoDoc;
    }

    public void setListaTipoDoc(List<ParametroDto> listaTipoDoc) {
        this.listaTipoDoc = listaTipoDoc;
    }

    public String getDescripcionAmonestacion() {
        return descripcionAmonestacion;
    }

    public void setDescripcionAmonestacion(String descripcionAmonestacion) {
        this.descripcionAmonestacion = descripcionAmonestacion;
    }

    public String getTituloAmonestacion() {
        return tituloAmonestacion;
    }

    public void setTituloAmonestacion(String tituloAmonestacion) {
        this.tituloAmonestacion = tituloAmonestacion;
    }

    public AmonestacionDto getAmonestacionDto() {
        return amonestacionDto;
    }

    public void setAmonestacionDto(AmonestacionDto amonestacionDto) {
        this.amonestacionDto = amonestacionDto;
    }

    public AlumnoDto getAlumnoDto() {
        return alumnoDto;
    }

    public void setAlumnoDto(AlumnoDto alumnoDto) {
        this.alumnoDto = alumnoDto;
    }

    public List<AlumnoDto> getListaAlumno() {
        return listaAlumno;
    }

    public void setListaAlumno(List<AlumnoDto> listaAlumno) {
        this.listaAlumno = listaAlumno;
    }

    public GestionTalentoPersonaDto getGestionTalentoPersonaDto() {
        return gestionTalentoPersonaDto;
    }

    public void setGestionTalentoPersonaDto(GestionTalentoPersonaDto gestionTalentoPersonaDto) {
        this.gestionTalentoPersonaDto = gestionTalentoPersonaDto;
    }

    public List<GestionTalentoPersonaDto> getListaGestionTalentoPersonaDto() {
        return listaGestionTalentoPersonaDto;
    }

    public void setListaGestionTalentoPersonaDto(List<GestionTalentoPersonaDto> listaGestionTalentoPersonaDto) {
        this.listaGestionTalentoPersonaDto = listaGestionTalentoPersonaDto;
    }

    public List<EvaluacionCompetenciaDto> getListaEvaluacionCompetencia() {
        return listaEvaluacionCompetencia;
    }

    public void setListaEvaluacionCompetencia(List<EvaluacionCompetenciaDto> listaEvaluacionCompetencia) {
        this.listaEvaluacionCompetencia = listaEvaluacionCompetencia;
    }

    public List<EvaluacionDesempenoDto> getListaEvaluacionDesempeno() {
        return listaEvaluacionDesempeno;
    }

    public void setListaEvaluacionDesempeno(List<EvaluacionDesempenoDto> listaEvaluacionDesempeno) {
        this.listaEvaluacionDesempeno = listaEvaluacionDesempeno;
    }

    public List<ParametroDto> getListaTiposArchivo() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCore.CatalogoParametro.ARCHIVO_TIPO);
    }

    public void setListaTiposArchivo(List<ParametroDto> listaTiposArchivo) {
        this.listaTiposArchivo = listaTiposArchivo;
    }
}
